package com.partterns.interceptor;

import com.partterns.proxy.HelloWorld;
import com.partterns.proxy.HelloWorldImpl;

/**
 * 测试责任链模式
 * 当一个对象在一条链中被多个拦截器处理（拦截器也可以选择不拦截它）时，我们称这样的设计模式为责任链模式
 * before方法按照从最后一个拦截器到第一个拦截器的加载顺序进行，而after方法相反
 * 责任链的优点在于我们可以在传递链上加入新的拦截器，增加拦截逻辑，其缺点是会增加代理和反射，而代理和反射性能不高
 */
public class TestInterceptor {
    public static void main(String[] args){
        HelloWorld proxy1=(HelloWorld)InterceptorJdkProxy.bind(new HelloWorldImpl(),"com.partterns.interceptor.Interceptor1");
        HelloWorld proxy2=(HelloWorld)InterceptorJdkProxy.bind(proxy1,"com.partterns.interceptor.Interceptor2");
        HelloWorld proxy3=(HelloWorld)InterceptorJdkProxy.bind(proxy2,"com.partterns.interceptor.Interceptor3");
        proxy3.sayHello();
    }

}
